Skip to content

Align SqlException Numbers across platforms #3461

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Jul 14, 2025

Conversation

David-Engel
Copy link
Contributor

Description

Attempt to better align SqlException Numbers across platforms. Wondering if it might be this simple.

Issues

#1773

Copy link
Contributor

@paulmedynski paulmedynski left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we have existing tests we could update? This is pretty critical functionality.

paulmedynski
paulmedynski previously approved these changes Jul 7, 2025
paulmedynski
paulmedynski previously approved these changes Jul 10, 2025
paulmedynski
paulmedynski previously approved these changes Jul 11, 2025
@paulmedynski
Copy link
Contributor

Let's resolve the conflicts and promote from draft to normal.

@paulmedynski paulmedynski added this to the 6.1.0 milestone Jul 11, 2025
@paulmedynski paulmedynski marked this pull request as ready for review July 11, 2025 15:39
@paulmedynski paulmedynski requested a review from a team as a code owner July 11, 2025 15:39
- Better capture error scenarios in TCP managed SNI.
- Fix logging bug in SqlClientEventSource.
- Change nativeError from uint to int
@paulmedynski
Copy link
Contributor

I rebased to main, fixed the conflicts, and squashed commits. Please re-review.

Copy link
Contributor

@paulmedynski paulmedynski left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One request.

@ErikEJ
Copy link
Contributor

ErikEJ commented Jul 11, 2025

Will this be a breaking change?

@paulmedynski paulmedynski modified the milestones: 6.1.0, 7.0-preview1 Jul 11, 2025
benrr101
benrr101 previously approved these changes Jul 11, 2025
Copy link
Contributor

@benrr101 benrr101 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall, seems pretty good!

paulmedynski
paulmedynski previously approved these changes Jul 12, 2025
@paulmedynski paulmedynski requested a review from benrr101 July 12, 2025 11:36
Copy link

codecov bot commented Jul 14, 2025

Codecov Report

Attention: Patch coverage is 43.63636% with 31 lines in your changes missing coverage. Please review.

Project coverage is 66.02%. Comparing base (8eb9f32) to head (e010988).
Report is 8 commits behind head on main.

Files with missing lines Patch % Lines
.../Data/SqlClient/ManagedSni/SniTcpHandle.netcore.cs 25.00% 27 Missing ⚠️
.../netcore/src/Microsoft/Data/SqlClient/TdsParser.cs 75.00% 1 Missing ⚠️
...nt/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs 66.66% 1 Missing ⚠️
...soft/Data/SqlClient/ManagedSni/SniError.netcore.cs 85.71% 1 Missing ⚠️
...t/Data/SqlClient/ManagedSni/SniNpHandle.netcore.cs 0.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3461      +/-   ##
==========================================
- Coverage   68.86%   66.02%   -2.84%     
==========================================
  Files         280      276       -4     
  Lines       62417    62216     -201     
==========================================
- Hits        42982    41079    -1903     
- Misses      19435    21137    +1702     
Flag Coverage Δ
addons 92.58% <ø> (ø)
netcore 68.94% <39.21%> (-3.81%) ⬇️
netfx 68.09% <85.71%> (+0.05%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@paulmedynski paulmedynski self-requested a review July 14, 2025 15:28
@paulmedynski paulmedynski modified the milestones: 7.0-preview1, 6.1.0 Jul 14, 2025
@paulmedynski
Copy link
Contributor

Will this be a breaking change?

We don't think so, but I will check the updated code paths to see if anything sticks out. These changes improve surfacing of underlying connection error codes on non-Windows, which boils down to exposing existing specific error codes at the appropriate times.

@ErikEJ
Copy link
Contributor

ErikEJ commented Jul 14, 2025

So it will not affect code relying on certain values to be thrown?

@David-Engel
Copy link
Contributor Author

So it will not affect code relying on certain values to be thrown?

The affected scenarios are all currently surfacing an error number of "0", which is very generic and arguably not actionable. This change should provide actionable error numbers. Linked issues generally refer to this as a "bug" since the underlying errors are actually being hidden. While you could argue that this behavior change is breaking, we've decided to take it for 6.1 since 6.1 will likely be a LTS release and we would be less inclined to make a behavior change in a hotfix. The behavior change will definitely be documented in the release notes.

@paulmedynski paulmedynski modified the milestones: 6.1.0, 7.0-preview1 Jul 14, 2025
@paulmedynski paulmedynski merged commit a93ff40 into main Jul 14, 2025
251 checks passed
@paulmedynski paulmedynski deleted the dev/david/cross-plat-error-nums branch July 14, 2025 18:04
@paulmedynski paulmedynski modified the milestones: 7.0-preview1, 6.1.0 Jul 14, 2025
paulmedynski added a commit that referenced this pull request Jul 15, 2025
* - Align SqlException Numbers across platforms
- Better capture error scenarios in TCP managed SNI.
- Fix logging bug in SqlClientEventSource.
- Change nativeError from uint to int

* - Removed duplicate SniErrorDetails object and aligned field names.

* - Added localized string for the new connection timed out exception.

* - Fixed tests sensitive to OS newlines.

---------

Co-authored-by: Paul Medynski <31868385+paulmedynski@users.noreply.github.com>
@paulmedynski paulmedynski modified the milestones: 6.1.0, 7.0-preview1 Jul 15, 2025
paulmedynski added a commit that referenced this pull request Jul 16, 2025
* Reduce automated test crashes (#2968)

* Converted Threads to long-running Tasks

The key advantage is that exceptions propagate properly.
If a thread throws an exception (as a result of a failed test assertion, or otherwise) then the test host crashes and must be restarted.

* Corrected the instantiation of the cancellation task - missing state parameter.

* Changes to TestSqlCommandCancel, eliminating timing-specific cancellation behaviour testing.
This should also allow the test to run on both netcore and netfx.

* Responding to code review.
* Removed two unnecessary iterations from DatabaseHelper.
* Added explanatory comments to ApiShould.
* Switched to using Task.WaitAll rather than waiting for each Task in sequence.

* Improve cancellation detection

Cancellation can trigger one of several different errors, resulting in a flakier test.
Also ensure that the query always takes more than 150ms, ensuring that a quick query execution doesn't cause the test to fail.
Finally, make sure that we try to read everything from the SqlDataReader.

* Correcting previous merge

* Align SqlException Numbers across platforms (#3461)

* - Align SqlException Numbers across platforms
- Better capture error scenarios in TCP managed SNI.
- Fix logging bug in SqlClientEventSource.
- Change nativeError from uint to int

* - Removed duplicate SniErrorDetails object and aligned field names.

* - Added localized string for the new connection timed out exception.

* - Fixed tests sensitive to OS newlines.

---------

Co-authored-by: Paul Medynski <31868385+paulmedynski@users.noreply.github.com>

* Align SqlException Numbers across platforms

- Manually fixing some error reporting that wasn't cherr-picked because it was part of larger changes.

* Updated TdsParser.Windows.cs to use the SniErrorDetails struct from TdsParserStateObject.

---------

Co-authored-by: Edward Neal <55035479+edwardneal@users.noreply.github.com>
Co-authored-by: David Engel <davidengel@microsoft.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants